// 总功有多少个递增三元组
// i, j, k和位置没有关系，所以可以直接排序
#include <iostream>
#include <algorithm>
typedef long long LL;
using namespace std;

const int N = 100010;
int a[3][N];

int main()
{
    int n;
    LL ans = 0;
    cin >> n;
    for(int i = 0; i < 3; ++i)
    {
        for(int j = 0; j < n; ++j)
            cin >> a[i][j];
        sort(a[i], a[i] + n);
    }

    // 既然枚举第一个会遇到棘手的边界问题
    // 那就枚举第二列啊！！！
    // 做题经验啊！！
    
    int end1 = 0, end2 = 0;
    for(int i = 0; i < n; ++i)
    {
        int key = a[1][i];
        //在a[0]找比他小的最大值
        while(end1 < n && a[0][end1] < key) ++end1;
        //在a[2]找比他大的最小值
        while(end2 < n && a[2][end2] <= key) ++end2;
        ans += (LL)end1 * (n - end2);
    }
    cout << ans << endl;
    return 0;
}
